package fr.grobim.hangovers.gestionBudget.actions.tableaux.factures;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;

import fr.grobim.hangovers.gestionBudget.beans.comptes.Membre;
import fr.grobim.hangovers.gestionBudget.beans.factures.Facture;

public class FactureTableau implements Serializable {
	
	private static final long serialVersionUID = 1L;

	private Integer id;
	
	private String libelleSource;
	
	private String periodicite;
	
	private Double montantDeBase;
	
	private String payeurParDefaut;
	
	private String membresConcernesParDefaut;
	
	public FactureTableau() {
		
	}

	public FactureTableau (Facture facture) {
		this.id = facture.getId();
		this.libelleSource = facture.getSource().getLibelle();
		this.periodicite = facture.getPeriodiciteEnum().getLibelle();
		if (facture.getMontantDeBase() == null) {
			this.montantDeBase = 0d;
		} else {
			this.montantDeBase = facture.getMontantDeBase();
		}
		if (facture.getPayeurParDefaut() != null) {
			this.payeurParDefaut = facture.getPayeurParDefaut().getSurnom();
		} else {
			this.payeurParDefaut = StringUtils.EMPTY;
		}
		
		String membres = StringUtils.EMPTY;
		if (CollectionUtils.isNotEmpty(facture.getMembresConcernesParDefaut())) {
			List<String> membresSurnoms = new ArrayList<String>(facture.getMembresConcernesParDefaut().size());
			for (Membre membre : facture.getMembresConcernesParDefaut()) {
				membresSurnoms.add(membre.getSurnom());
			}
			Collections.sort(membresSurnoms);
			Iterator<String> itMembres = membresSurnoms.iterator();
			membres += itMembres.next();
			while (itMembres.hasNext()) {
				membres += ", ".concat(itMembres.next());
			}
		}
		this.membresConcernesParDefaut = membres;

	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getLibelleSource() {
		return libelleSource;
	}

	public void setLibelleSource(String libelleSource) {
		this.libelleSource = libelleSource;
	}

	public String getPeriodicite() {
		return periodicite;
	}

	public void setPeriodicite(String periodicite) {
		this.periodicite = periodicite;
	}
	
	public Double getMontantDeBase() {
		return montantDeBase;
	}

	public void setMontantDeBase(Double montantDeBase) {
		this.montantDeBase = montantDeBase;
	}

	public String getPayeurParDefaut() {
		return payeurParDefaut;
	}

	public void setPayeurParDefaut(String payeurParDefaut) {
		this.payeurParDefaut = payeurParDefaut;
	}

	public String getMembresConcernesParDefaut() {
		return membresConcernesParDefaut;
	}

	public void setMembresConcernesParDefaut(String membresConcernesParDefaut) {
		this.membresConcernesParDefaut = membresConcernesParDefaut;
	}

	public static List<FactureTableau> convertirListe(List<Facture> listeFacture) {
		List<FactureTableau> listeRetour = new ArrayList<FactureTableau>();
		for (Facture facture : listeFacture) {
			listeRetour.add(new FactureTableau(facture));
		}
		return listeRetour;
	}
}
